home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1995 October / EnigmA AMIGA RUN 01 (1995)(G.R. Edizioni)(IT)[!][issue 1995-10][Aminet 7].iso / Aminet / comm / fido / SHELTER275.lha / rexx / GRAB.WPLRX < prev    next >
Text File  |  1995-04-18  |  30KB  |  920 lines

  1. /**/ 
  2. v="$VER: GRAB Wplrx  Roof Remote File Xfer Utility    Williamson 54.76"
  3.  
  4. /* set to 1 if accepting new users */
  5. newusers=1
  6. /* The number of requests permitted per call. Note some magic names */
  7. /* may return more than one file. Each magic name is counted as one */
  8. maxfiles=3
  9.  
  10. /* maximum number of files and sessions for a verified user         */
  11. maxpsessions=10
  12.  
  13. /* your list of files recd in last week */
  14. newfiles="Mail:filelists/newfiles.lst"
  15.  
  16. /* help files for new users */
  17. newinfo="Info:help/Grab"
  18.  
  19. /* TAGNAME of your SYSOP Feedback message base */
  20. sysopbase=GetClip('SYSOPBASE')
  21.  
  22. /* Your name */
  23. sysop=GetClip('SYSOP')
  24.  
  25. /* Verified user Data */
  26. ucfg="CFG:Guser.dat"
  27. vcfg="CFG:Vuser.dat"
  28. /* Non-Secure Inbound directory for users */
  29. indir=addslash(dequote(getclip('INDIR')))'USERS/'
  30.  
  31. /* If RFS is used instead of XfreqSh, maximum config and request    */
  32. /* accounting will take precedence over maxfiles setting            */
  33. rfs=1
  34.  
  35. ViewNew=0
  36.  
  37. /* if NOT using RFS */
  38. freqcmd="run Xfreqsh >LOG:Freq.log CFG:FREQ.cfg"
  39.  
  40. options RESULTS
  41. options failat 99
  42. numeric digits 14
  43. signal on syntax
  44. signal on halt
  45. signal on ioerr
  46. signal on break_c
  47. signal on break_d
  48. pragma("W","NULL")
  49. rpath=addslash(dequote(GetClip('REXXDIR')))
  50.  
  51. if ~show('L',"rexxsupport.library") then
  52.   if ~addlib("rexxsupport.library",0,-30,0) then do
  53.      say "Couldn't access support.library !"
  54.     exit 20
  55.   end
  56.  
  57. log=show('P','ROOFLOG')
  58. mailer=GetCLip('SHELTER')
  59. l_mailer=lower(mailer)
  60. wplport=l_mailer
  61. sv='v'right(v,5)
  62. script="GRAB"
  63. cls  ='\014'  /* WPL */  
  64. cr   ='\r\n'  /* WPL */
  65. nl   ='0a'X   /* REXX */
  66. bs   ='08'x
  67. quote='"'
  68. tmsg="T:GRAB-"pragma('ID')
  69. timeouts=0
  70. parse arg baud port username
  71. btarea=center("GRAB "sv,21)
  72. btitle=center("A WPL Application by Robert Williamson",41)
  73. call send(cls||cr||cr||center('GRAB File Requester 'sv' on $(host.sitename) Line 'port,80)||cr)   
  74. call send(" ÕÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͸ "cr)
  75. call send(" ³°°°°°±±±±±²²²²²ÛÛÛÛÛ²²²²²³"btarea"³²²²²²ÛÛÛÛÛ²²²²²±±±±±°°°°°³ "cr)
  76. call send(" ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´ "cr)
  77. call send(" ³°°°°°±±±±±²²²²²³"btitle"³²²²²²±±±±±°°°°°³ "cr)
  78. call send(" ÔÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍ; "cr||cr)
  79. call send(" MAKE SURE your terminal program has the following protocol settings:"cr)
  80. call send(" Zmodem CRC32 with AutoDownLoad ON and ADL Challenge ON."cr)
  81. call send(" Do not waste time guessing filenames, requesting files that are not"cr) 
  82. call send(" in the FileList or which are larger than the allowable free bytes!"cr)
  83. call send(" These are the requirements to GRAB files"cr)
  84.  
  85. if username="" then fname=wpl_prompt(60,cr' Please enter your name: ')
  86.   else fname=strip(username)
  87.  
  88. if fname="" | words(fname)<2 | index(fname,"'")>0  | index(fname,"`")>0 then do
  89.   call send(cr'Sorry, your first name and last name (sans apostrophes) is required to GRAB files'cr)
  90.   'Set USER FALSE'
  91.   call cleanup()
  92.   exit 0
  93. end
  94.  
  95. xname='$(p.login) 'fname time()
  96. 'RexxMSG NY LOGPROC "PutLine 'l_mailer'wplstat$(line) 'xname'"'
  97. tdomain=translate(fname,"_"," ");s_address="0:0/0.0"
  98. user_verified=GetVar("VUSER"port,"G")=="TRUE"
  99. call PutLog('Login:'fname tdomain"#"s_address 'Verified:'user_verified,10,10)
  100.  
  101. notgrabreq=1
  102. if ~rfs then reqfile="0.0.0.0.REQ"
  103. else do
  104.   reqfile=tdomain".GRAB"
  105.   if exists(indir||reqfile) then do
  106.     call send(cr' Found your request list'cr)
  107.     notgrabreq=0
  108.   end
  109.   newuser=0
  110.   if notgrabreq then do
  111.     AcctFile="LOG:RFSacct/h/"tdomain".0.0.0.0"
  112.     if ~exists(AcctFile) then do
  113.       call Send(' We have No account for you as yet 'fname||cr)
  114.       if newusers then do
  115.         call Send(' Accounts are only created when you have made requests.'cr)
  116.         if upper(wpl_prompt(30,' Since your are a new user, would you like some more information? (Y/n) '))~="N" then do
  117.           call display_text(newinfo)
  118.           x=wpl_prompt(120,' Hit RETURN')
  119.         end
  120.         call Send(cr||cr' New users are given an extended Byte limit for their first request.'cr)
  121.         call Send(' You will be able to download up to 1 Meg, for this session only.'cr)
  122.         call send(' You should NOT select verification if your link rate is less than 10K,'cr)
  123.         call send(' If you do your will lose the first-timer limit of 100MB and your byte'cr)
  124.         call send(' limit will be reduced to 100 times your link rate.'cr)
  125.         call send(' EG: If you are 2400bs, your limit will be 240Kbytes.'cr)
  126.         call Send(' For all subsequent sessions, normal limits will apply.'cr)
  127.         x=wpl_prompt(120,' Hit RETURN')
  128.         newuser=1
  129.       end;else do
  130.         call Send(cr||' Sorry, new users are not being accepted at this time.'cr)
  131.         exit
  132.       end
  133.     end;else do
  134.       call Send(cr' You can automate your GRAB sessions by uploading 'tdomain'.GRAB,'cr)
  135.       call Send(' containing the list of files you want, with the UL command.'cr)
  136.     end
  137.   end 
  138.  
  139.   if ~user_verified then do
  140.     if ~verify() then do
  141.       call PutLog(fname' declined verification',10,10)
  142.       user_verified=0
  143.     end;else do
  144.       maxfiles=maxpsessions
  145.       user_verified=1
  146.     end
  147.   end
  148.  
  149.   if notgrabreq then call show_status()
  150.  
  151.   'Set remote.address' tdomain"#"s_address
  152.   'SetA remote $(remote.address)'
  153.   'Set remote.network FIDO'
  154.   'BeginSession $(remote.address)'
  155.   'RexxMsg NY "LOGPROC" "PutLog 'l_mailer'wpl $<time> $(line) GRAB session with $(remote.address)"'
  156. end
  157. reqname=indir||reqfile
  158.  
  159. if notgrabreq then do
  160.   if ViewNew then do
  161.     if upper(wpl_prompt(30,' View new files received in the last week? (y/N) '))="Y" then call display_text(newfiles)
  162.   end
  163.   call send(' You can either Browse File Areas and Mark files for DownLoad or'cr)
  164.   call send(' Enter filenames if you know the exact names from the file list'cr)
  165.   dobrowse=upper(wpl_prompt(30,' [B]rowse or [E]nter? (b/E) '))=="B"
  166.   
  167.   if dobrowse then do
  168.     if exists("RPDIR:BROWSE") then do
  169.       address COMMAND 'Browse' baud port availbytes fname
  170.       stat=RC
  171.     end;else if exists(rpath'browse.rexx') then do
  172.       address REXX rpath'browse.rexx' baud port availbytes fname
  173.       stat=RESULT
  174.     end;else do
  175.       call send('Sorry, Browse is not available at the moment'cr)
  176.       stat=1
  177.     end
  178.     call PutLog('Browse returned:'stat,10,10)
  179.     if stat>1 then do
  180.       call cleanup
  181.       exit
  182.     end;else if stat=1 then notgrabreq=0
  183.     else do
  184.       if upper(wpl_prompt(30,' You did not mark any files for download'CR' Do you wish to enter filenames? (Y/n)'))="N" then do
  185.         call send(' OK, bye'cr)
  186.         call cleanup
  187.         exit
  188.       end
  189.     end
  190.   end
  191. end
  192.  
  193. rereq:
  194.   if notgrabreq then call getrequests
  195.   if lostcarrier('request entry') then exit
  196.   if ~notgrabreq then signal getfiles
  197. getstate:
  198.   resp=upper(wpl_prompt(30,' [D]ownload, [R]e-enter requests, [A]bort Grab? '))
  199.   if resp="R" then signal rereq
  200.   else if resp="A" then do
  201.     call PutLog(fname 'aborted',10,10)
  202.     call send(cr||cr' -> Bye, sorry you did not find anything you wanted!'cr||cr)
  203.     call cleanup
  204.     exit
  205.   end
  206.   else if resp~="D" then signal getstate
  207.  
  208. getfiles:
  209. if word(statef(reqname),2) ~= 0 then do
  210.   hydra=upper(wpl_prompt(20," Select Protocol: [H]ydra or [Z]modem (h/Z):"))=="H"
  211.   call send(cls||cr' Please WAIT, now searching for the files you have requested'cr)
  212.   if hydra then do
  213.     call send(' You have a few seconds to MAKE SURE Hydra is your default protocol.'cr)
  214.   end;else do
  215.     call send(' You have a few seconds to MAKE SURE Zmodem is your default'cr)
  216.     call send(' protocol and that both AutoDownLoad and ADL Challenge are ON.'cr)
  217.     call send(' If you do not have these settings, the transfer will fail.'cr)
  218.   end
  219.   if rfs then do
  220.     host_address=GetClip('DOMAIN')"#"GetClip('HOST.ADDRESS.'GetClip('DOMAIN'))
  221.     address "REXX" rpath'RFS.rexx' wplport port baud host_address reqname user_verified tdomain'#'s_address fname
  222.   end;else do
  223.     cmd=freqcmd reqfile reqname tdomain'#'s_address port
  224.     address COMMAND cmd
  225.   end
  226.   if lostcarrier('during search') then exit
  227.   call send(cr' Ready to Send!'cr)
  228.   if hydra then do
  229.     Address "LOGPROC" "PutLine 'l_mailer'wplstat"port protpos "Hydra"
  230.     x=wpl_prompt(999,' Hit RETURN to start Hydra transfer')
  231.     call Hxfer()
  232.   end;else do
  233.     Address "LOGPROC" "PutLine 'l_mailer'wplstat"port protpos "ZMODEM"
  234.     call Zxfer()
  235.   end
  236.   dl=1
  237. end;else do
  238.   call send(cr' No files requested'cr)
  239.   dl=0
  240. end
  241.  
  242. if dl then resp=wpl_prompt(60,cr' Well 'fname', do you want to thank the sysop for these free downloads? y/N ')
  243.   else resp=wpl_prompt(60,cr' Well 'fname', do you want to leave the sysop a message? y/N ')
  244. if upper(resp)="Y" then call feedback
  245.  
  246. call send(cr||cr' -> Bye!'cr||cr)
  247.  
  248. if ~dl then call PutLog('No requests from' fname,10,10)
  249. call cleanup()
  250. exit 0
  251.  
  252. getrequests:
  253. call send(cls)
  254. call send(' Enter filenames (maximum 'maxfiles', NO WILDCARDS!)'cr)
  255. call send(' or a blank line to start transfer.'cr)
  256.  
  257. if ~Open('reqfile',reqname,'A') then do
  258.   if ~Open('reqfile',reqname,'W') then do
  259.     call PutLog("Error opening" reqname,10,10)
  260.     call cleanup
  261.     Exit 10
  262.   end
  263. end
  264. do n=1 to maxfiles
  265.   wantfile=wpl_prompt(60,cr' FILE 'n': ')
  266.   if wantfile="" then leave
  267.   if pos('*',wantfile)>0 then do
  268.     call send(' NO WILDCARDS!'cr)
  269.     if wantfile="-1" | n>1 then n=n-1
  270.     iterate
  271.   end
  272.   else call WriteLN('reqfile',strip(wantfile))
  273.   call PutLog(fname 'requesting:'strip(wantfile),10,10)
  274. end
  275. call close('reqfile')
  276. return
  277.  
  278.  
  279. display_text:
  280. textfile=arg(1)
  281. if ~open('tf',textfile,"R") then do
  282.   call Send(cr'Sorry, unable to find 'textfile||cr)
  283.   call PutLog("Cannot open "textfile,10,10)
  284.   return 0
  285. end
  286. call PutLog('Typing 'textfile' for 'fname,10,10)
  287. call send(cls||cr)
  288. lines=0
  289. do while ~eof('tf')
  290.   if lostcarrier('during text display') then exit
  291.   call send(readln('tf')||cr)
  292.   lines=lines+1
  293.   if lines=24 then do
  294.     lines=0
  295.     if upper(wpl_prompt(60,cr'More(Y,n): '))="N" then do
  296.       call close('tf')
  297.       call send(cr)
  298.       return 0
  299.     end;else do
  300.       call send(copies(bs,12))  
  301.       call send(cls)
  302.     end
  303.   end
  304. end
  305. call close('tf')
  306. call send(cr)
  307. return 0
  308.  
  309. show_status:
  310. if ~open('rcfg',"RAM:RFS.CFG",'r') then
  311.   if ~open('rcfg',"CFG:RFS.CFG",'r') then return 0
  312. call seek('rcfg',-512,'E')
  313. do while ~eof('rcfg')
  314.   z=readln('rcfg')
  315. /*  if upper(left(word(z,1),3))="MAX" then interpret z  */
  316.   if upper(left(word(z,1),3))~="MAX" then iterate
  317.   parse upper var z vvar '=' vval vcmt
  318.   select
  319.     when vvar="MAXBYTES" then MaxBytes=strip(vval)
  320.     when vvar="MAXDAILY" then MaxDaily=strip(vval)
  321.     when vvar="MAXREQNAMES" then MaxReqNames=strip(vval)
  322.     when vvar="MAXHBYTES" then MaxHBytes=strip(vval)
  323.     when vvar="MAXHDAILY" then MaxHDaily=strip(vval)
  324.     when vvar="MAXCALLS" then MaxCalls=strip(vval)
  325.     when vvar="MAXHTOTAL" then MaxHTotal=strip(vval)
  326.     otherwise nop
  327.   end
  328. end
  329. call close('rcfg')
  330.  
  331. call send(cls||cr)
  332. AcctFile="LOG:RFSacct/h/"tdomain".0.0.0.0"
  333. if ~exists(AcctFile) then do
  334.   call Send(' Opening new account for 'fname||cr)
  335.   call Send(' Account will be deleted if no requests made.'cr||cr)
  336.   FirstDate=date();LastDate=date()
  337.   NumReqs=0;ReqFiles=0;ReqBytes=0;LastBytes=0;UserCalls=1
  338.   limits="RESET"
  339.   if user_verified then do
  340.     availbytes=(baud*100)
  341.     availsessions=maxpsessions
  342.   end;else do
  343.     if ~newuser then availbytes=MaxHBytes
  344.     else do
  345.       availbytes=1000000
  346.       user_verified=1
  347.     end
  348.     availsessions=MaxCalls
  349.   end
  350. end;else do
  351.   call open('Acct',AcctFile,'R')
  352.   FirstDate=readln('Acct')
  353.   LastDate =readln('Acct')
  354.   NumReqs  =readln('Acct')
  355.   ReqFiles =readln('Acct')
  356.   ReqBytes =readln('Acct')
  357.   LastBytes=readln('Acct')
  358.   UserCalls=readln('Acct')
  359.   call close('Acct')
  360.   if Date()=LastDate then do
  361.     limits="ACTIVE"
  362.     if user_verified then do
  363.       availbytes=(baud*100)-LastBytes
  364.       availsessions=maxpsessions-UserCalls
  365.     end;else do
  366.       availbytes=MaxHDaily-LastBytes
  367.       availsessions=MaxCalls-UserCalls
  368.     end
  369.   end;else do
  370.     limits="RESET"
  371.     if user_verified then do
  372.       availbytes=(baud*100)
  373.       availsessions=maxpsessions
  374.     end;else do
  375.       availbytes=MaxHBytes
  376.       availsessions=MaxCalls
  377.     end
  378.   end
  379. end
  380. s12=copies(" ",12)
  381. call send(s12' ÕÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͸'cr)
  382. call send(s12' ³  Account                :'right_justify(fname" ³",23)||cr)
  383. call send(s12' ³  First Call             :'right_justify(Firstdate" ³",23)||cr)
  384. call send(s12' ³  Last Call              :'right_justify(LastDate" ³",23)||cr)
  385. call send(s12' ³  Number of Requests     :'right_justify(NumReqs" ³",23)||cr)
  386. call send(s12' ³  Files Transfered       :'right_justify(ReqFiles" ³",23)||cr)
  387. call send(s12' ³  Total Bytes Sent       :'right_justify(ReqBytes" ³",23)||cr)
  388. call send(s12' ³  Bytes Sent Last Call   :'right_justify(LastBytes" ³",23)||cr)
  389. call send(s12' ³  Number of Sessions     :'right_justify(Usercalls" ³",23)||cr)
  390. call send(s12' ³  Files available        :'right_justify(maxfiles" ³",23)||cr)
  391. call send(s12' ³  Bytes available        :'right_justify(availbytes" ³",23)||cr)
  392. call send(s12' ³  Remaining Sessions     :'right_justify(availsessions" ³",23)||cr)
  393. call send(s12' ³  Daily limits           :'right_justify(limits" ³",23)||cr)
  394. call send(s12' ³  Total Freeloader Limit :'right_justify(MaxHtotal" ³",23)||cr)
  395. call send(s12' ÔÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ;'cr||cr)
  396.  
  397. if ReqBytes>MaxHtotal then do
  398. call send(s12' ÕÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͸'cr)
  399. call send(s12' ³  FreeLoader Limit Exceeded - Time to REGISTER  ³'cr)
  400. call send(s12' ÔÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ;'cr||cr)
  401.  
  402. resp=upper(wpl_prompt(30,cr' Too bad, would you like a look at what you are missing? (y/n)'))
  403. if resp="Y" then call display_text(newfiles)
  404. call cleanup()
  405. exit
  406. end
  407. return
  408.  
  409. /* feedback to sysop */
  410. feedback:
  411. call PutLog('GRAB feedback from 'fname,10,10)
  412. call send(cls||cr' To:                  'sysop)
  413. call send(cr' From:                'fname)
  414. call send(cr' Subject:              User Feedback')
  415.  
  416. call send(cr' Enter your message one line at a time.')
  417. call send(cr' Lines greater than 256 characters will be truncated.')
  418. call send(cr' Hit Return on a blank line to select Save or continue.'cr||cr)
  419.  
  420. call open('smsg',tmsg,"W")
  421. call writech('smsg'," GRAB Feedback to Sysop from "fname" Posted:"date()" at "time()||nl)
  422. editing=1
  423. line=1
  424. c=0
  425. do while editing
  426.   do while resp ~= ""
  427.     if lostcarrier('during feedback') then leave
  428.     resp=wpl_prompt(200,"-->"line": ")
  429.     if resp ~= "" then do
  430.       chars=writech('smsg',resp||nl)
  431.       c=c+chars
  432.       line=line+1
  433.     end
  434.   end /* hit a blank line */
  435.  
  436.   if lostcarrier('during feedback') then do
  437.     call writech('smsg',fname 'dropped carrier'nl)
  438.     call save_msg
  439.     exit
  440.   end
  441.   if upper(wpl_prompt(120,cr' You entered 'line-1' lines and 'chars' characters (total:'c'), [S]ave/[c]ontinue?'cr))="S" then editing=0
  442. end  /* finished editing */
  443. call save_msg
  444. call send(cr' Message saved, thanks' fname||cr)
  445. return 0
  446.  
  447. save_msg:
  448. call writech('smsg',nl)
  449. call close('smsg')
  450. call PutLog('Saving message from 'fname' in 'sysopbase,10,10)
  451. call send(cr' Saving......')
  452. if exists("RPDIR:Smsg") then do
  453.   cmd=sysopbase tmsg '"'fname'"' '"'sysop'" Grab FeedBack'
  454.   call PutLog('Executing:' cmd,10,10)
  455.   address COMMAND "run >NIL: Smsg" cmd
  456. end;else do
  457.   cmd=rpath'Smsg.rexx' sysopbase tmsg '"'fname'"' '"'sysop'" Grab FeedBack'
  458.   call PutLog('Executing:' cmd,10,10)
  459.   Address "AREXX" cmd
  460. end
  461. address
  462. return
  463.  
  464.  
  465. lostcarrier:
  466.  'CheckCarrier'
  467. if RC=0 then return 0
  468. call PutLog(fname 'dropped carrier during 'arg(1),10,10)
  469. call cleanup
  470. return 1
  471.  
  472. send:
  473. 'Print' quote||arg(1)||quote
  474. 'Send' quote||arg(1)||quote
  475. return
  476.  
  477. wpl_prompt:
  478. 'Print' quote||arg(2)||quote
  479. 'Send' quote||arg(2)||quote
  480. getstring:
  481. 'GetInbound E0 'arg(1)
  482. 'String $(event)'
  483. if upper(RESULT)='CARRIER' then do
  484.   'RexxMsg NY "LOGPROC" "PutLog 'l_mailer'wpl $<time> $(line) GRAB $(remote.address) Lost Carrier"'
  485.   call PutLog(fname' dropped carrier',10,10)
  486.   call cleanup
  487.   exit
  488. end
  489. if upper(RESULT)='TIMEOUT' then do
  490.   timeouts=timeouts+1
  491.   call Send(cr'Timeout:'timeouts' .....WakeUp!'cr)
  492.   if timeouts>3 then do
  493.     'RexxMsg NY "LOGPROC" "PutLog 'l_mailer'wpl $<time> $(line) GRAB $(remote.address) User Timeout"'
  494.     call PutLog(fname' fell asleep',10,10)
  495.     call Send(cr'Timeout EXIT, 'fname' fell asleep'cr)
  496.     call cleanup
  497.     exit
  498.   end
  499.   return "-1"
  500. end
  501. else if upper(RESULT)='LOGIN' then do
  502.   'String $(namebuf)'
  503.   x=(RESULT)
  504. end
  505. else x=""
  506. return x
  507.  
  508.  
  509. verify:
  510. retries=3
  511. if notgrabreq then do
  512.   call Send(cr" If you are a LOCAL caller and wish to be able to DL more than the"cr) 
  513.   call Send(" prescribed limits, please enter your MODEM phone number. If you are"cr)
  514.   call Send(" a new user, you will be asked to select an 8 character password."cr)
  515.   call Send(" You MUST remember it, as it will be expected every time you use Grab."cr||cr)
  516.  
  517.   call Send(" If you are a LONG-DISTANCE caller, and have made an arrangement with the"cr)
  518.   call Send(" Sysop, enter X instead of Y or N, and enter your password when asked."cr||cr) 
  519. end
  520. resp=upper(wpl_prompt(120," Do you wish to be verified? (Y/n) "))
  521. if resp="X" then isdistant=1
  522. else isdistant=0
  523. if resp="N" then do
  524.   call Send(cr" Use of this system is a priviledge that can be revoked at any time."cr)
  525.   call Send(" Abuse of this privledge will result in denial of access."cr)
  526.   call Send(" Callers who do not plan to abuse this privilege, should have no"cr)
  527.   call Send(" problem with providing verifiable information as a token of honesty."cr)
  528.   do i=1 to retries
  529.     resp=compress(wpl_prompt(120," Please enter your VOICE phone number: "),'- ')
  530.     if ~datatype(resp,'NUMERIC') then do
  531.       call Send(' Wierd number, 'retries-i' trys left'cr)
  532.       iterate
  533.     end
  534.     if length(resp)<7 | (length(resp)=7 & (substr(resp,2,2)="11" | left(resp,1)="0")) then do
  535.       call Send(' Illegal or Invalid number, 'retries-i' trys left'cr)
  536.       iterate
  537.     end;else do
  538.       call PutLog('User:'fname' Voice number:'resp,10,10)
  539.       call finduser(resp,'V')
  540.       return 0
  541.     end
  542.   end
  543.   call Send(cr" Your lack of co-operation has resulted in denial of access."cr)
  544.   call PutLog('No Voice number, Booting user 'fname,10,10)
  545.   'Set bootuser TRUE'
  546.   call cleanup
  547.   exit
  548. end
  549. if isdistant then do
  550.   phonenumber=wpl_prompt(120," Enter access number: ")
  551.   if left(phonenumber,1)~="0" | ~finduser(phonenumber,'G') then do
  552.     call Send(" Invalid access number, sorry"cr)
  553.     return 0
  554.   end
  555.   if ~getpassword(password) then do
  556.     call send(cr||cr'Too bad'cr)
  557.     call PutLog(fname ' bad LD password',10,10)
  558.     'RexxMSG NY LOGPROC "PutLine 'l_mailer'wplstat$(line) $(p.password) BAD"'
  559.     call cleanup
  560.     exit
  561.   end;else do
  562.     status=fname' verified'
  563.     'RexxMSG NY LOGPROC "PutLine 'l_mailer'wplstat$(line) $(p.status)' status' $(p.password) OK"'
  564.     call PutLog(status,10,10)
  565.     return 1
  566.   end
  567. end;else do
  568.   phonenumber=""
  569.   do i=1 to retries
  570.     resp=compress(wpl_prompt(120," Enter your local phone number: "),'- ')
  571.     if ~datatype(resp,'NUMERIC') then do
  572.       call Send(' Wierd number, 'retries-i' trys left'cr)
  573.       iterate
  574.     end
  575.     if length(resp)~=7 | substr(resp,2,2)="11" | left(resp,1)="0" then do
  576.       call Send(' Illegal, Invalid or Long Distance number, 'retries-i' trys left'cr)
  577.       call send(' You think I am crazy enough to call you Long Distance? Get Real!'cr)
  578.       iterate
  579.     end;else do
  580.       phonenumber=resp
  581.       leave
  582.     end
  583.   end
  584.   if phonenumber="" then do
  585.     call send(' You blew your chance!'cr)
  586.     call send(' You may still use GRAB, but you will limited in number of files'cr)
  587.     call send(' and total bytes you can download'cr)
  588.     return 0
  589.   end
  590.  
  591.   if finduser(phonenumber,'G') then call send(' You have already selected a password.'cr' If you have forgotten your password, leave me a NOTE with your phone number.'cr)
  592.   else do
  593.     call send(' Opening new user account'cr)
  594.     if ~set_password() then do
  595.       call send(' You blew your chance!'cr)
  596.       return 0
  597.     end
  598.   end
  599.  
  600.   call Send(" The system will call you back in a few moments. Your should enable"cr)
  601.   call Send(" autoanswer with ATS0=1 or type ATA when you see the RING."cr)
  602.   call Send(" You must enter your password when asked."cr) 
  603.   if upper(wpl_prompt(30," The system will now hangup and call you back at "phonenumber", OK? (Y/n) "))="N" then do
  604.     call send(' You blew your chance'cr)
  605.     return 0
  606.   end
  607.  
  608.   pnum="ATDT"phonenumber"|"
  609.   do i=1 to retries
  610.     status='CBV Dialing 'fname', try:'i
  611.     'RexxMSG NY LOGPROC "PutLine 'l_mailer'wplstat$(line) $(p.status)' status '$(p.number)' phonenumber '$(p.response)"'
  612.     call PutLog(status,10,10)
  613.     call delay(60)
  614.     if mdmcmd(30,'$(hangupstring)','OK') then do
  615.       call delay(60)
  616.       if mdmcmd(5,'$(initstring)','OK') then do
  617.         call delay(60)
  618.         if mdmcmd(120,pnum,'CONNECT') then do
  619.           'ModemClear'
  620.           status='Reconnected to 'fname' on try 'i', getting password'
  621.           'RexxMSG NY LOGPROC "PutLine 'l_mailer'wplstat$(line) $(p.status)' status '$(p.response) CONNECT"'
  622.           call PutLog(status,10,10)
  623.           if ~getpassword(password) then do
  624.             call send(cr||cr'Too bad'cr)
  625.             call PutLog(fname ' bad password',10,10)
  626.             'RexxMSG NY LOGPROC "PutLine 'l_mailer'wplstat$(line) $(p.password) BAD"'
  627.             call cleanup
  628.             exit
  629.           end;else do
  630.             status=fname' verified'
  631.             'RexxMSG NY LOGPROC "PutLine 'l_mailer'wplstat$(line) $(p.status)' status' $(p.password) OK"'
  632.             call PutLog(status,10,10)
  633.             return 1
  634.           end
  635.         end;else do
  636.           'Print "No response to dial\n"'
  637.           iterate
  638.         end
  639.       end;else do
  640.         'Print "Cannot reinit\n"'
  641.         iterate
  642.       end
  643.     end;else do
  644.       'Print "Cannot hangup\n"'
  645.       iterate
  646.     end
  647.   end
  648.   call PutLog('Unable to contact 'fname' @ 'phonenumber,10,10)
  649.   if ~open('um',"LOG:RFSacct/h/"tdomain".0.0.0.0.m",'A') then do
  650.     if ~open('um',"LOG:RFSacct/h/"tdomain".0.0.0.0.m",'W') then do
  651.       call putlog('Unable to inform user',10,10)
  652.       call cleanup
  653.       exit 0
  654.     end
  655.   end
  656. end
  657. call writeln('um'," Call Back Verifier Report on "date()" at "time())
  658. call writeln('um'," After three attempts, we were unable to connect with you at" phonenumber".")
  659. call writeln('um'," Either the number given was incorrect or is Long Distance from this exchange.")
  660. call writeln('um'," If you are a LONG-DISTANCE caller you may make an arrangement with the")
  661. call writeln('um'," Sysop for a password to enable more generous limits.") 
  662.  
  663. call close('um')
  664. call PutLog('Posted failure to connect message to user',10,10)
  665. call cleanup
  666. exit 0
  667.  
  668. mdmcmd:
  669. 'Clear event lastresponse'
  670. 'ModemClear'
  671. 'SmartSend 'arg(2)
  672. call delay(100)
  673. getprogress:
  674. 'GetResponse' arg(1)
  675. 'String $(event) $(lastresponse)'
  676. x=upper(RESULT)
  677. if word(x,1)~="PROGRESS" then x=word(x,1)
  678. else do
  679.   if word(x,2)~="CONNECT" then signal getprogress
  680.   else x="CONNECT"
  681. end 
  682. return(x==arg(3))
  683.  
  684.  
  685. getpassword:
  686. 'ModemClear'
  687. call delay(60)
  688. call send(cr||cr' CallBack Verifier 'sv||cr)
  689. do i=1 to retries
  690.   if lostcarrier('password request') then exit
  691.   if upper(wpl_prompt(120," Password: "))~=arg(1) then call send(' Wrong, 'retries-i' trys left'cr)
  692.   else do
  693.     call send(' Ok!'cr)
  694.     call SetVar("VUSER"port,'TRUE',"G")
  695.     return 1
  696.   end
  697. end
  698. return 0
  699.  
  700. set_password:
  701. call send('  You must select a password to use everytime you wish to be verified'cr)
  702. call send('  If you forget your password, you will not get extended access'cr)
  703. do i=1 to retries
  704.   password=""
  705.   if lostcarrier('new password request') then exit
  706.   resp=upper(wpl_prompt(120," Select an 8 character Password: "))
  707.   if length(resp) ~=8 then do
  708.     call send(' Invalid format, 'retries-i' trys left'cr)
  709.     call send(' User failed counting test'cr)
  710.   end;else do
  711.     password=strip(resp)
  712.     call delay(20)
  713.     if upper(wpl_prompt(120,' Ok, enter it again:'))~=password then do
  714.       call send(' Does not match!'cr)
  715.       call send(' User failed memory test.'cr)
  716.       iterate
  717.     end;else do
  718.       call saveuser('G')
  719.       call PutLog(fname' @ 'phonenumber' selected a password',10,10)
  720.       call send(cr' Password accepted'cr)
  721.       call send(cr' Do not ever forget it!'cr)
  722.       return 1
  723.     end
  724.   end
  725. end
  726. return 0
  727.  
  728.  
  729. finduser:
  730. tnum=compress(arg(1),'-')
  731. if ~datatype(tnum,"N") then signal illegal
  732. vmode=arg(2)=='V'
  733. if vmode then scfg=vcfg
  734. else scfg=ucfg
  735. call delete("T:upw")
  736. address COMMAND "Fsearch >t:upw" scfg tnum
  737. call open('p',"T:upw",'R');udat=readln('p');call close('p')
  738. if left(udat,2)="!@" then do /* IF NUMBER NOT FOUND */
  739.   if vmode then do
  740.     address COMMAND "Fsearch >t:upw" scfg translate(fname,'_'," ")
  741.     call open('p',"T:upw",'R');udat=readln('p');call close('p')
  742.     if left(udat,2)~="!@" then do /* IF NAME FOUND */
  743.       parse VAR udat unum uname 
  744.       uname=translate(uname," ","_")
  745.       SIGNAL ILLEGAL
  746.     end
  747.   end
  748.   call send(cr||cr' NEW USER'||'07'x||cr||cr)
  749.   call PutLog(fname' Account:'tnum,10,10)
  750.   if vmode then do
  751.     phonenumber=tnum
  752.     call saveuser('V')
  753.   end
  754.   return 0
  755. end
  756. if vmode then do
  757.   parse VAR udat unum uname
  758.   uname=translate(uname," ","_")
  759. end;else parse VAR udat unum upw uname
  760. if upper(uname)~=upper(fname) then signal ILLEGAL
  761. else do
  762.   if ~vmode then password=upw
  763.   return 1
  764. end
  765. return 0
  766.  
  767. illegal:
  768.   call send(copies(cr||cr' ***** ILLEGAL LOGIN *****'||'07'x||cr||cr,5))
  769.   call PutLog(fname' impersonating 'uname,10,10)
  770.   call PutLog('Listed:'unum' Hacked:'tnum,10,10)
  771.   'Set bootuser TRUE'
  772. exit
  773.  
  774. saveuser:
  775. vmode=(arg(1)=='V')
  776. if vmode then scfg=vcfg
  777. else scfg=ucfg
  778.   if ~open('u',scfg,'A') then do
  779.     if ~open('u',scfg,'W') then do
  780.       call PutLog('Unable to open 'scfg,10,10)
  781.       call send(cr' System error'cr)
  782.       exit
  783.     end
  784.   end
  785.   if vmode then call writeln('u',phonenumber translate(fname,"_"," "))
  786.   else call writeln('u',phonenumber password fname)
  787.   call close('u')
  788.   address COMMAND "Sort from" scfg" to "scfg
  789. return
  790.  
  791.  
  792. Zxfer:
  793. t='GRAB $(protocol) Sending to 'fname
  794. 'Set req TRUE protocol ZMODEM inbound' indir
  795. if ~rfs then do
  796.   'Set remote.address' tdomain"#"s_address
  797.   'BeginSession $(remote.address)'
  798. end
  799. 'Set titadr' '"'t'"'
  800. 'RexxMsg NY "LOGPROC" "PutLog 'l_mailer'wpl $<time> $(line) GRAB sending files to $(remote.address)"'
  801. 'RexxMsg NY "LOGPROC" "PutLine 'l_mailer'wplstat$(line) $(p.protocol) $(protocol)"'
  802. 'SetMailerFlags' '"DN,PN"'
  803. 'XprSetup xprzedzap.library TC,B8,M1024,C$(Baud),NN,ZN'
  804. 'SetUpDate "CON:0/$($(line).w_offset)/640/130/$(titadr)/AUTO/SCREEN$(pscreen)"'
  805. 'XprSend ""'
  806. 'RexxMsg NY "LOGPROC" "PutLog 'l_mailer'wpl $<time> $(line) GRAB $(remote.address) $(protocol) Send:$(RC)"'
  807. 'XprClose'
  808. 'SetUpDate NULL'
  809. 'RexxMsg NY "LOGPROC" "PutLog 'l_mailer'wpl $<time> $(line) GRAB $(remote.address) $(protocol) RC:$(RC)"'
  810. 'EndSession all'
  811. return
  812.  
  813. Hxfer:
  814. Address VALUE wplport||line
  815. 'String "$(device) $(unit) $(locked) $(baudlocked) $(baud)"'
  816. parse var RESULT DEVICE UNIT LOCKED BAUDLOCKED BAUD .
  817. if locked="TRUE" then SPEED=BAUDLOCKED
  818. else SPEED=BAUD
  819. ctlfile="T:"tdomain".lst"
  820. filefile='LOG:Hupload'
  821. if ~exists(ctlfile) then do
  822.   call send(' SYSTEM ERROR: 'ctlfile ' missing')
  823.   call putlog('SYSTEM ERROR: 'ctlfile ' missing')
  824.   exit 10
  825. end
  826. cmd='MAIL:HydraCom port 'unit' device 'device' speed 'baud' handshake hard noinit receive Mail:INBOUND/users log LOG:Hydra.LOG result 'filefile' send @'ctlfile
  827. address "LOGPROC" 'Putlog 'loggroup time() Line script 'HYDRA CMD:'cmd
  828. address COMMAND cmd
  829. address "LOGPROC" 'Putlog 'loggroup time() Line script 'HYDRA:'RC
  830. call delete(ctlfile)
  831. if exists(filefile) then call getdesc()
  832. return
  833.  
  834.  
  835. getdesc:
  836. if ~open('rf',filefile,'r') then exit
  837. call send(cls)
  838. do while ~eof('rf')
  839.   l=space(readln('rf'),1)
  840.   if l="" then iterate
  841.   parse var l res byts bps 'bps' cps 'cps' err 'errors' flow last fname sn .
  842.   if res~="R" then iterate
  843.   localfile=get_fn(fname)
  844.   desc=strip(wpl_prompt(200,cr||'Please describe 'localfile' (max: 79 characters)'||cr))
  845.   call PutLog('File:'localfile' Desc:'desc,10,10)
  846.   address COMMAND "FileNote" fname '"'||desc||'"'
  847.   drop desc
  848.   x=upper(wpl_prompt(120,'Would you like to enter a long description? (y/N) '))
  849.   if x="Y" then call feedback
  850. end
  851. call close('rf')
  852. call delete(filefile)
  853. call send(cr||'Thanks for the uploads 'username||cr)
  854. exit
  855.  
  856.  
  857. /* get filename */
  858. get_fn:
  859. if LastPos('/',arg(1))~=0 then return SubStr(arg(1),LastPos('/',arg(1))+1)
  860. else if LastPos(':',arg(1))~= 0 then return SubStr(arg(1),LastPos(':',arg(1))+1)
  861. else return arg(1)
  862.  
  863. /* align text to right of field  adding spaces or trucating on left to fit   */
  864. right_justify:
  865. if length(arg(1))>arg(2) then return (right(arg(1),arg(2)))
  866. else return (copies(" ",arg(2)-length(arg(1)))||arg(1))
  867.  
  868. PutLog:  procedure expose log script
  869. if ~log then do
  870.   'RexxMsg RN "LOGPROC" "Putlog 'l_mailer'wpl $<time> $(line) 'script':' arg(1)
  871. end;else do
  872.   if arg(2) > GetClip('LOGLEVEL') then return 0
  873.   address 'ROOFLOG' 'logline' left(time(),5) script': 'arg(1)
  874.   address
  875. end
  876. return 0
  877.  
  878. addslash:
  879. curr=arg(1)
  880. select
  881.   when right(curr,1)=":" then nop
  882.   when right(curr,1)="/" then nop
  883.   otherwise curr=curr"/"
  884. end
  885. return curr
  886.  
  887. /* a useful procedure by Walt Sullivan    */
  888. dequote:
  889. parse arg thing
  890. parse var thing '"' unq_thing '"'
  891. if unq_thing ~= "" then return unq_thing
  892. return thing
  893.  
  894. lower:
  895. return(bitor(arg(1),'20'x))
  896.  
  897. cleanup:
  898. call delete(reqname)
  899. call close('tf')
  900. return 0
  901. break_c:
  902. break_d:
  903. PutLog('User abort',10,10)
  904. call cleanup
  905. exit 10
  906. novalue: call template_oops "Novalue" sigl
  907. syntax:  call template_oops "Syntax(RC=" RC ")" sigl RC
  908. failure: call template_oops "Failure(RC=" RC ")" sigl
  909. ioerr:   call template_oops "IOErr" sigl
  910. halt:    call template_oops "Halt" sigl
  911. template_oops:
  912. parse arg what badline code
  913. if code ~= "" then PutLog('ERR: Line 'badline what errortext(code),10,10)
  914. else PutLog('ERR: Line' badline what,10,10)
  915. /*PutLog('ERR: Line 'badline':'strip(sourceline(badline)),10,10)    */
  916. call cleanup
  917. exit(40)
  918. /**/
  919.  
  920.